// 验证支付请求数据
const validatePaymentRequest = (amount, coins, paymentMethod) => {
  // 验证金额
  if (!amount || typeof amount !== 'number' || amount <= 0) {
    return '支付金额必须大于0';
  }

  // 验证金币数量
  if (!coins || typeof coins !== 'number' || coins <= 0) {
    return '金币数量必须大于0';
  }

  // 验证支付方式
  const validPaymentMethods = ['alipay', 'wechat', 'bank_transfer'];
  if (!paymentMethod || !validPaymentMethods.includes(paymentMethod)) {
    return '无效的支付方式';
  }

  // 验证金额与金币的对应关系
  // 这里可以添加具体的业务规则，例如：
  const coinsPerYuan = 10; // 假设1元可以购买10个金币
  const expectedCoins = amount * coinsPerYuan;
  if (coins !== expectedCoins) {
    return '金额与金币数量不匹配';
  }

  return null; // 返回null表示验证通过
};

// 验证分页参数
const validatePagination = (page, limit) => {
  const pageNum = parseInt(page);
  const limitNum = parseInt(limit);

  if (isNaN(pageNum) || pageNum < 1) {
    return '页码必须是大于0的整数';
  }

  if (isNaN(limitNum) || limitNum < 1 || limitNum > 100) {
    return '每页数量必须在1-100之间';
  }

  return null; // 返回null表示验证通过
};

// 验证订单ID格式
const validateOrderId = (orderId) => {
  if (!orderId || typeof orderId !== 'string') {
    return '订单ID不能为空';
  }

  // 假设订单ID格式为：ORDER + 时间戳(13位) + 3位随机数
  const orderIdPattern = /^ORDER\d{16}$/;
  if (!orderIdPattern.test(orderId)) {
    return '无效的订单ID格式';
  }

  return null; // 返回null表示验证通过
};

// 验证回调数据
const validateCallbackData = (data) => {
  const requiredFields = ['orderId', 'status'];
  for (const field of requiredFields) {
    if (!data[field]) {
      return `缺少必要字段: ${field}`;
    }
  }

  // 验证支付状态
  const validStatuses = ['pending', 'paid', 'failed'];
  if (!validStatuses.includes(data.status)) {
    return '无效的支付状态';
  }

  return null; // 返回null表示验证通过
};

module.exports = {
  validatePaymentRequest,
  validatePagination,
  validateOrderId,
  validateCallbackData
};